Storage systems maintain information in allocation tables that indicate which data blocks from storage are assigned and which data blocks are available for allocation (e.g. free blocks). Storage systems modify the allocation tables during allocation and de-allocation to reflect the current status of each block. Most modern storage systems store allocation tables in some sort of bitmaps. Bits are set in the fields to signify blocks that are presently allocated or bits are clear to signify blocks available for future allocation.
In systems that use large persistent storage, data (and/or metadata) representation of which blocks are allocated or free can consume large amounts of the system's main memory when the entire data representation is present in the main memory.
Some systems try to reduce such a large memory footprint by using paging where the system pages-in only required data into main memory and the rest of the data is maintained on persistent storage. However in many circumstances, the cost of paging is not acceptable when the system is trying to provide quick response times for accessing its data. Also at times it might not be acceptable to keep the entire data representation in main memory due to various constraints such as having a limited total size of main memory and needing memory for other operations.